AWS Application Composerを用いてYAMLテンプレートを作成し、リソースを構築してみた
はじめに
かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。このブログではAWS Application Composerを用いてYAMLテンプレートを作成し、CloudFormationでリソースを作成しました。
別の方法でのリソース作成については以下のブログに記載しました。
構成図は以下の通りです。
AWS Application Composerとは
AWS Application Composerを利用することでビジュアルインターフェースを使用して、AWSサービスをキャンバス上にドラッグアンドドロップするGUIな方法で、アプリケーションのアーキテクチャを設計できます。
そして、ビジュアルインターフェースで設計したアーキテクチャに基づいて、自動的にCloudFormationテンプレートやSAMテンプレートを生成します。
AWS Application Composerでテンプレート作成
1.コンソールから「AWS CloudFormation」→「スタックを作成(新しいリソースを使用)」「プロジェクトの作成」を選択します。
2.「Application Conposerから構築」→「Application Composerで作成」を選択しキャンパスを開きます。
2.画面左のタブから構成に必要なリソースを検索し、キャンパス上にドラッグ&ドロップします。
今回使用したリソースタイプ
- AWS::EC2::VPC
- AWS::EC2::Instance
- AWS::EC2::SecurityGroup
- AWS::EC2::Subnet
- AWS::EC2::InternetGateway
- AWS::EC2::VPCGatewayAttachment
3.キャンパス上の各リソースをクリックし、リソース名とリソース構成(Properties)を記入します。
VPC
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
サブネット
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
セキュリティグループ
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
EC2
InstanceType: t2.micro
ImageId: ami-00c79d83cf718a893 #自身のリージョンに存在するAMI IDを記入
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref katsumataSubnetCFn
GroupSet:
- !Ref katsumataSgCFn
IGW
IGWをVPCへアタッチ
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn
4.全てのリソースに詳細を記述し、保存したのち、構成図を確認します。
またテンプレートに切り替えることで生成されたYAMLテンプレートコードを確認することができます。
5.右上の「メニュー」→テンプレートを保存」でローカルに作成したテンプレートを保存します。
6.ローカル上で不足しているコードを記述します。今回の構成ではAWSTemplateFormatVersionとMyIPを指定するParametersを追加しました。
生成されたテンプレート
Resources:
katsumataVPCCFn:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
katsumataEC2CFn:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-00c79d83cf718a893
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref katsumataSubnetCFn
GroupSet:
- !Ref katsumataSgCFn
katsumataSgCFn:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
katsumataSubnetCFn:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
katsumataIGWCFn:
Type: AWS::EC2::InternetGateway
Properties: {}
katsumataVPCGatewayAttachmentCFn:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn
修正後のテンプレート
#追加ここから
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
MyIP:
Type: String
Description: The IP address range that is allowed to access the instance
Default: '104.28.204.107/32'
#追加ここまで
Resources:
katsumataVPCCFn:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
katsumataEC2CFn:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-00c79d83cf718a893
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref katsumataSubnetCFn
GroupSet:
- !Ref katsumataSgCFn
katsumataSgCFn:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
katsumataSubnetCFn:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
katsumataIGWCFn:
Type: AWS::EC2::InternetGateway
Properties: {}
katsumataVPCGatewayAttachmentCFn:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn
保存したテンプレートからリソース作成
保存したテンプレートからCloudFormationでリソースを作成します。
1.先ほどのCloudFormationの「スタックを作成(新しいリソースを使用)」選択先の画面で、「既存のテンプレートを選択」→「テンプレートファイルのアップロード」→「ファイルの選択」から保存したテンプレートをアップロードします。
2.スタック名を記入します。
3.スタックを作成し、Complete状態になることを確認します。
4.コンソー上から作成した各リソースを確認することができます。余分なコストがかからないように、必要に応じてCloudFormationの「スタック」で作成したスタックを選択し、「削除」からスタックの削除を行います。
おわりに
AWS Application Composerを用いてテンプレートを作成した感想として、Propertiesに関してはコードを自分で記入する必要があるため、前提知識が必要だと感じました。しかし、ドラッグ&ドロップで直感的に操作できるため、比較的スピード感を持って構築ができる点は非常に良かったです。また、既存のテンプレートをキャンパス上で構築図として視覚化することができるため、構成の理解にも役立ちます。
ご覧いただきありがとうございました。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。